LVA Datenbanksysteme (LU 1.0 181.129)
Wintersemester 2005/2006
Gruppe C - Beispiel 2
HausverwaltungsGmbH
Lösen Sie die folgenden Probleme mittels SQL:
- Geben Sie für alle Häuser die Anzahl der
vermieteten Wohnungen und die Gesamtsumme deren Wohnflächen aus.
- Geben Sie SVNr und Name jenes Eigentümers aus, der die
meisten Wohnungen besitzt.
- Geben Sie jene Häuser aus, bei denen sämtliche
Sanierungsaufträge an unterschiedliche Firmen erteilt wurden.
- Geben Sie alle Verwaltungsstellen gemeinsam mit ihrem
Budget und der Anzahl der Häuser aus, für die mindestens 2
Sanierungsauschreibungen oder mindestens 2
Sanierungsaufräge existieren.
- Geben Sie jene Firma gemeinsam mit ihrem Firmensitz aus, die die
wenigsten Kostenvoranschläge gemacht hat. Dabei sollen allerdings
nur jene Firmen berücksichtigt werden, die bisher zumindest einen
Auftrag erteilt bekommen haben.
- Geben Sie für alle Paare von Firmen und
Verwaltungsstellen die Anzahl der erteilten Aufträge aus.
(Anmerkung: Achten Sie darauf, dass wirklich alle Paare ausgegeben
werden, d.h. auch Paare, bei denen die jeweilige Verwaltungsstelle der
jeweiligen Firma noch nie einen Auftrag erteilt hat. Achten Sie
außerdem darauf, dass jedes Paar nur einmal ausgegeben werden
soll!)
Lösen Sie die folgenden Probleme mittels PL/SQL:
(Anmerkung: Verwenden Sie, falls notwendig, die "transaction control"
Befehle COMMIT, ROLLBACK und SAVEPOINT!)
-
Schreiben Sie eine Prozedur, die für alle Personen die an ein
Haus zu zahlenden Betriebskosten berechnet und den Betrag in die
Datenbank einträgt bzw. aktualisiert. (Anmerkung:
Betriebskostenberechnung etc. siehe Erläuterungen in Beispiel1!)
-
Schreiben Sie eine Prozedur, die für Wohnungen mit
Sofortkaufoption den Preis berechnet. Übergeben sie hiefür
den Schlüssel der Wohnung als Parameter,
prüfen Sie anschließend ob die "übergebene" Wohnung
überhaupt eine Kaufoption besitzt. Ist dies nicht der Fall,
ändern sie die Textmeldung der Oracle Exception "NO_DATA_FOUND"
auf folgenden Text: "Diese Wohnung besitzt keine Kaufoption!".
Andernfalls berechnen Sie den Verkaufpreis, indem Sie alle bisher
bezahlten Mieten vom eigentlichen Preis abziehen, dabei muss allerdings
noch auf die Befristung geachtet werden, d.h. ist eine Kaufoption
beispielsweise auf 3 Jahre befristet, können maximal 36
Monatsmieten abgezogen werden. Geben Sie anschließend den Preis
der Wohnung aus!
(Anmerkung: der Einfachheit halber berechnen Sie die Anzahl der
bezahlten Mieten mit folgender Formel: (SYSDATE - VertragsDatum)/31)
-
Schreiben Sie einen Trigger, der jedesmal ausgelöst wird, nachdem
ein Update auf die Tabelle Auschreibung vollzogen wurde. Prüfen
Sie ob im Zuge dieses Updates die Auschreibung beendet wurde (von
'false' auf 'true').
Falls ja, soll der Trigger einen der oder den besten Kostenvoranschlag
auswählen und falls dessen Höhe das noch verfügbare
Budget der jeweiligen Verwaltungsstelle nicht überschreitet, den
Auftrag an die betroffenen Firma erteilen.
Um den Auftrag zu erteilen, schreiben Sie auch eine Funktion die
hierfür die kleinste freie SanierungsID berechnet und returniert.
Anschließend soll das verfügbare jährliche Budget der
Verwaltungsstelle noch um diesen Betrag verringert werden. Sollte das
Budget nicht reichen, werfen Sie eine eigene Exception, die folgende
Fehlermeldung ausgibt: "Budget zu gering!"
(Tipp: erstellen Sie am besten eine Prozedur (stored procedure) die all
diese Aufgaben übernimmt und einen Trigger der lediglich diese
Prozedur mit den benötigten Parametern (IDNr) aufruft!)